//
//  YSCoverViewController.h
//  YSBookRead
//
//  Created by MOLBASE on 2018/11/7.
//  Copyright © 2018年 YangShen. All rights reserved.
//
//  平滑/无特效 时的翻页控制器

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@class YSCoverViewController;

@protocol YSCoverViewControllerDelegate <NSObject>

@required

/**
 获取上一个控制器

 @param coverViewController coverViewController
 @param currentViewController 当前显示的控制器
 @return 当前显示控制器的上一个控制器
 */
- (nullable UIViewController *)coverViewController:(YSCoverViewController *)coverViewController viewControllerBeforeCurrentViewController:(UIViewController * _Nullable)currentViewController;

/**
 获取下一个控制器

 @param coverViewController coverViewController
 @param currentViewController 当前显示的控制器
 @return 当前显示控制器的下一个控制器
 */
- (nullable UIViewController *)coverViewController:(YSCoverViewController *)coverViewController viewControllerAfterCurrentViewController:(UIViewController * _Nullable)currentViewController;

@optional

/**
 将要显示的控制器

 @param coverViewController coverController
 @param pendingViewController 将要显示的控制器
 */
- (void)coverViewController:(YSCoverViewController *)coverViewController willTransitionToPendingViewController:(UIViewController *)pendingViewController;

/**
 切换是否完成

 @param coverViewController coverController
 @param currentViewController 当前正在显示的控制器
 @param finished 切换是否成功
 */
- (void)coverViewController:(YSCoverViewController *)coverViewController currentViewController:(UIViewController * _Nullable)currentViewController didFinishAnimating:(BOOL)finished;

@end


@interface YSCoverViewController : UIViewController

/// 代理
@property (nonatomic, weak) id <YSCoverViewControllerDelegate> delegate;

/// 拖动手势是否有效 default:YES
@property (nonatomic, assign) BOOL panGestureRecognizerEnabled;

/// 点击手势是有效 default:YES
@property (nonatomic, assign) BOOL tapGestureRecognizerEnabled;

/// 拖动手势是否动画 default:YES
@property (nonatomic, assign) BOOL openAnimate;

/// 当前控制器
@property (nonatomic, strong, readonly, nullable) UIViewController *currentViewController;

/**
 手动设置控制器 无动画

 @param viewController 设置显示的控制器
 */
- (void)setViewController:(UIViewController * _Nullable)viewController;


/**
 手动设置显示控制器

 @param viewController 设置显示的控制器
 @param animated 设置显示的控制器
 @param isAbove 动画是否从上面显示:YES 从下面显示:NO
 */
- (void)setViewController:(UIViewController * _Nullable)viewController animated:(BOOL)animated isAbove:(BOOL)isAbove;

@end

NS_ASSUME_NONNULL_END
